1.判断电话是否拨出
项目中有时候需要统计某个电话是否真的拨打出去,可以用下面的方法:
iOS 10(包括10)之前:
在需要用到的地方导入
#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>
创建一个属性
@property (nonatomic, strong) CTCallCenter *callCenter;
赋值:
self.callCenter = [[CTCallCenter alloc] init];
self.callCenter.callEventHandler = ^(CTCall* call) {
if ([call.callState isEqualToString:CTCallStateDisconnected])
{
NSLog(@"挂断了电话");
}
else if ([call.callState isEqualToString:CTCallStateConnected])
{
NSLog(@"电话通了");
}
else if([call.callState isEqualToString:CTCallStateIncoming])
{
NSLog(@"来电话了");
}
else if ([call.callState isEqualToString:CTCallStateDialing])
{
NSLog(@"正在播出电话");
}
else
{
NSLog(@"什么也没有");
}
};
#import <CallKit/CallKit.h>
创建属性:
@property (nonatomic, strong) CXCallController *call;
赋值:
self.call = [[CXCallController alloc] init];
//设置代理
[self.call.callObserver setDelegate:self queue:nil];
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call{
// 注意拨出和结束 outgoing 都是true
if (call.outgoing){
NSLog(@"拨出电话");
}else if (call.hasEnded){
NSLog(@"结束");
}
}
2.身份证键盘
有时候项目中有需要输入身份证号码的地方,用系统键盘或者第三方键盘都没有单独的只能输入数字和X的键盘,这时候就只能自定义一个键盘了。
关键操作主要是画一个有数字按钮和X按钮的视图,然后赋值给输入框的inputView
属性,另外就是当拿到数字字符或者X字符后,输入到输入框的时候注意光标位置的改变。
具体代码参照github地址
3.监听数组里的内容改变
监听数组里的内容增加,删除,可以使用KVOMutableArray
,支持block
,支持RAC
。
4.弹出框防键盘遮挡
// fixInfoView 为弹出框contentView;(就是防止被遮挡的视图)
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
STRONG
// 转换坐标
CGRect frmae = [self.fixInfoView.superview convertRect:self.fixInfoView.frame toView:[UIApplication sharedApplication].keyWindow];
CGRect keyboardfrmae = [x.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
__block CGFloat value = CGRectGetMaxY(frmae) - keyboardfrmae.origin.y;
if (self.fixInfoView.superview){
[UIView animateWithDuration:0.3 animations:^{
STRONG
self.fixInfoView.superview.transform = CGAffineTransformTranslate(self.fixInfoView.superview.transform, 0, -value);
}
}];
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillHideNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
STRONG
if (self.fixInfoView.superview){
[UIView animateWithDuration:0.3 animations:^{
STRONG
self.fixInfoView.superview.transform = CGAffineTransformIdentity;
}];
}
}];